//
// Created by win10 on 24-11-15.
//

#include <stdio.h>
#include <stdlib.h>
//基于 顺序存储结构 的 队列 数据结构实现

//1.设置 队列结构的 最大值
#define MAXSIZE 1000

//2.定义队列的结构体
typedef struct{
  //用数组表示队列里的数据
  int data[MAXSIZE];
  //队头指针
  int front;
  //队尾指针
  int rear;
}SqQueue;

//3.初始化队列
void initQueue(SqQueue * q){
  q->front =  q->rear = 0;
}

//4.判断是否为空
int isQueueEmpty(SqQueue * q) {

  return q->front == q->rear;
}

//5.判断是否已满
int isQueueFull(SqQueue * q) {
  return q->rear == MAXSIZE;
}

//6.入队操作
int enQueue(SqQueue * q, int value) {
  //判断队列是否已满
  if(isQueueFull(q)) {
    printf("Queue is full\n");
    return -1;
  }
  //插入数据
  int pos=q->rear;//入队 固定在队尾入队
  q->data[pos] = value;
  //队尾指针上升一格
  q->rear ++;
  return pos;

}

//出队操作
int deQueue(SqQueue * q) {
  if(isQueueEmpty(q)) {
    printf("Queue is empty\n");
    return -1;
  }
  // //定位到队头指针
  // int pos = q->front;
  // int value = q->data[pos];
  // //队头指针上移一格
  // q->front++;
  // return value;
  return q->data[q->front++];
}

//新建一个队列
int main(void){
//新建一个队列
SqQueue q;
//初始化
initQueue(&q);

  //入队
  enQueue(&q,1);
  enQueue(&q,2);
  enQueue(&q,3);

  //出队
  printf("%d\n",deQueue(&q));
  printf("%d\n",deQueue(&q));
  printf("%d\n",deQueue(&q));
}